Adapter selection based on a queue time factor

ABSTRACT

A method, system, and computer program product are described for a machine selecting a selected adapter among two or more adapters that perform a same function. The method includes generating a request, at the machine, for the function, and calculating a time indicator associated with each of the two or more adapters based on a respective adapter queue time factor (QTF) associated with each of the two or more adapters, the adapter QTF associated with each of the two or more adapters being a computed value. The method also includes selecting the selected adapter and submitting one or more requests to the selected adapter of the two or more adapters to perform the function based on a comparison of the time indicator associated with each of the two or more adapters.

DOMESTIC PRIORITY

This application is a continuation of U.S. application Ser. No.14/922,656 filed Oct. 26, 2015 issued as U.S. Pat. No. 9,984,031 on May29, 2018, the disclosure of which is incorporated herein by reference inits entirety.

BACKGROUND

The present invention relates to adapter selection, and morespecifically, to adapter selection based on a queue time factor.

In computing systems, input/output adapters (I/O adapters) areelectronic circuits (e.g., expansion card, plug-in module) that acceptinputs, perform some transformation (e.g., compression, sorting), andprovide the transformed data as output. An adapter may be shared bymultiple machines or by multiple logical partitions, referred to asvirtual machines (self-contained operating environments that behave likeindividual computers). The use of adapters allows the central processingunit (CPU) core processor of the machine or VM to perform other tasksrather than those done by the adapters. In some environments, eachmachine or virtual machine (VM) is unaware of the amount of work thatother machines or VMs may have sent to the same adapter for processingand output.

SUMMARY

Embodiments include a method, machine, and a computer program productfor a machine selecting a selected adapter among two or more adaptersthat perform a same function. Aspects include generating a request, atthe machine, for the function; calculating a time indicator associatedwith each of the two or more adapters based on a respective adapterqueue time factor (QTF) associated with each of the two or moreadapters, the adapter QTF associated with each of the two or moreadapters being a computed value; and selecting the selected adapter andsubmitting one or more requests to the selected adapter of the two ormore adapters to perform the function based on a comparison of the timeindicator associated with each of the two or more adapters.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram of an exemplary system in which VMs selectadapters according to embodiments;

FIG. 2 is a block diagram of components associated with each VMaccording to embodiments; and

FIG. 3 is a process flow of a method of generating the informationneeded by a VM to select an adapter according to embodiments; and

FIG. 4 is a process flow of a method of selecting an adapter at a VMaccording to embodiments.

DETAILED DESCRIPTION

As noted above, an adapter may be shared among multiple physicalmachines or VMs. Further, in some environments, the machines or VMs areunaware of how many elements or submissions have already been submittedby other machines or VMs. In addition, each machine or VM may haveaccess to more than one adapter to complete the same function. Thus, ifa machine or VM were aware of how many total submissions were alreadypending (from all machines or VMs) for each available adapter (the totalqueue depth), the machine or VM could select the adapter that wouldcomplete its request in the least amount of time. However, each machineor VM is only aware of the number of requests that it has submitted (thelocal queue depth). The time (indicated by a time stamp) from submissionof a request to a given adapter until the time (indicated by anothertime stamp) that the adapter begins to process the submitted element isreferred to as the queue time. Each machine or VM may maintain anaverage queue time for its submissions at each adapter. However, becausea given machine or VM is unaware of the total number of submissionsalready queued in a given adapter (because submissions by other machinesor VMs are not visible), the average queue time is not an accuratereflection of the time it may take for the next submission from themachine or VM to be processed. That is, based on the local queue depthin combination with the average queue time, the machine or VM may choosea particular adapter, but, if several submissions were made by othermachines or VMs to the same adapter in the meantime, the actual queuetime for the machine or VM's latest submission would be significantlyhigher than the local queue depth might indicate. Embodiments of thesystems and methods detailed herein relate to the use of a queue timefactor in selecting an adapter. The queue time factor mitigates the factthat the total queue depth at the adapter will be unknown to eachmachine or VM if more than one machine or VM submits requests to theadapter. While the discussion below specifically references VMs forexplanatory purposes, the embodiments also apply to multiple machinesthat share a processing resource, such as an I/O adapter, withoutknowledge of how many other machines are also accessing that resource.

FIG. 1 is a block diagram of an exemplary system 100 in which VMs 120select adapters 130 according to embodiments detailed herein. The VMs120 may be in one or more physically housed computing systems 110. Theexemplary system 100 includes two computing systems 110 a, 110 b. In theexemplary case shown in FIG. 1, computing system 110 a includes virtualmachines VM1 120-1, VM2 120-2, and VM3 120-3, and computing system 110 bincludes virtual machines VMx 120-x and VMy 120-y. As FIG. 1 shows,every VM 120 may not have access to every adapter 130. For example,while VM1 120-1 may use adapter A 130A or adapter B 130B, VMy 120-y mayonly use adapter B 130B. Four different VMs 120-1, 120-2, 120-3, 120-ymay use adapter B 130B while only one VM 120-2 may use adapter C 130C.Yet, VMs 120-1, 120-2, 120-3, 120-y do not have knowledge of the hightraffic on adapter B 130B any more than VM2 120-2 has knowledge that itis the only VM 120 with access to adapter C 130C. If the VMs 120 didhave knowledge of adapter 130 usage by other VMs 120, then VM2 120-2could always select adapter C 130C, for example, because VM2 120-2 hasno competition for the resources of adapter C 130C. In the absence ofthis knowledge, a queue time factor (QTF) is computed and used by eachVM 120 according to embodiments discussed further below.

FIG. 2 is a block diagram of components associated with each VM 120according to embodiments. While a VM 120 is an emulation of a computersystem (a software implementation of a machine (e.g., computer)), eachVM 120 is associated with the components discussed herein. Some of thosecomponents may be shared with one or more other VMs 120. The VM 120includes one or more memory devices 210 and one or more processors 220.The components associated with the VM 120 also include an interface 230to receive input and provide output. The memory device 210 storesinstructions to be implemented by the VM 120. These instructions includeinstructions for the processor to implement processes, discussed below,that are used to select an adapter 130. The memory device 210 may alsostore data input to or generated by the VM 120. The interface 230 mayallow both user input and input from other VMs 120 or other machines(e.g., wirelessly). The interface 230 may also allow output to a user(e.g., via a display) or to other VMs 120 or other machines. Theinterface 230 additionally facilitates input and output with one or moreadapters 130.

FIG. 3 is a process flow of a method of generating the informationneeded by a VM 120 to select an adapter 130 according to embodiments.The processes shown in FIG. 3 begin after processing of a requestsubmitted to an adapter 130 is completed. At block 310, the processesinclude receiving completion status information from the adapter 130 (atthe VM 120) indicating start of execution of the submitted request fromthe adapter 130. Determining queue time, at block 320, refers to usingthe time of start of execution in conjunction with a time that therequest was submitted to the adapter 130. That is, queue time is theduration from the time of submission of the request to the time thatprocessing of the request by the adapter 130 is started. Computing QTF,at block 330, is based on the queue time determined at block 320. TheQTF is given by:

$\begin{matrix}{{Q\; T\; F} = \frac{queue\_ time}{{queue\_ depth} + 1}} & \left\lbrack {{EQ}.\mspace{14mu} 1} \right\rbrack\end{matrix}$The queue_depth in EQ. 1 refers to the number of submissions by the VM120 to the same adapter 130 that were already pending at the time ofsubmission of the request for which queue_time is determined (at block320). As noted above, the VM 120 does not have knowledge of requestssubmitted to the same adapter 130 by other VMs 120. Thus, the queuedepth used to computer QTF is the local queue depth rather than thetotal queue depth at the adapter 130. EQ. 1 includes (queue_depth+1) inthe denominator to ensure that the denominator is not zero when thelocal queue depth is zero (i.e., there are no pending submissions to theadapter 130 by the VM 120). The value (queue_depth+1) may be referred toas the adjusted queue depth value.

At block 340, updating an adapter QTF value refers to combining the QTFcomputed after processing of a request by the adapter 130 (at block 330)with previously computed QTF values (computed at block 330 afterprocessing of previous requests). Because an adapter 130 may be sharedamong two or more VMs 120, more than VM 120 may maintain an adapter QTFvalue for the same adapter 130. The adapter QTF maintained for a givenadapter 130 by a given VM 120 may be an average of QTF values associatedwith the given adapter 130 at the given VM 120. In alternateembodiments, the adapter QTF may be a weighted average. For example,updating the adapter QTF (at block 340) after computation of another QTF(at block 330) based on processing of another request by the adapter 130may be given by:latest_QTF*0.1+previous_adapter_QTF*0.9  [EQ. 2]As the exemplary equation, EQ. 2, indicates, the latest_QTF (associatedwith the latest processed submission to the adapter 130) is weighted bya factor of 0.1 or 10% while the previous adapter QTF value (previouslycomputed based on previously executed submissions to the same adapter130) is weighted by a factor of 0.9 or 90%. Other weightings may be usedin alternate embodiments. A purpose of the weighting is to minimize theeffect of the queue time associated with any single request. That is,if, just prior to the latest submission by the VM 120, another VM 120made 10 submissions to the same adapter 130, then the queue time for thelatest submission by the VM 120 would likely be very long compared withprevious queue times (for submissions by the VM 120 to the same adapter130). To be clear, prior to any subsequent submissions (in fact, priorto the completion of the submitted request with the very long queuetime), the 10 submissions by the other VM 120 would be completed and,thus, should no longer be a consideration in the selection of an adapter130. Thus, weighting the QTF associated with the very long queue time ofthe latest submission less than the adapter QTF value that was computedprior to this latest submission would prevent the unusually long queuetime of the latest submission from skewing the adapter QTF. In the caseof the first QTF that is computed at block 330 after the first requestfrom the VM 120 to the adapter 130 is processed (i.e., with no previousQTF values), EQ. 2 indicates that the adapter QTF will be computed asthe calculated QTF value*0.1 (because the initial adapter QTF value willbe 0).

FIG. 4 is a process flow of a method of selecting an adapter 130 at a VM120 according to embodiments. Each VM 120 may implement the processesshown in FIG. 4 each time the VM 120 generates an instruction for afunction to be implemented by an adapter 130. The processes shown inFIG. 4 could be implemented by a VM 120 that has a choice of more thanone adapter 130 and is not privy to information about what, if any,other VMs 120 also submit requests to any of the available adapters 130.That is, before the processes shown in FIG. 4 are executed, a check maybe done by the VM 120 to determine whether more than one adapter 130 iseven available. At block 410, the processes include examining adapterQTF values (block 340, FIG. 3) that are updated after completion of eachrequest to each adapter 130. These adapter QTF values give insight intowhich adapter 130 to choose for a subsequent request, as detailed below.When (at block 420) one or more of the adapter QTFs is found to be 0(e.g., the adapter 130 has not previously been used by the VM 120), thena default value may be used as the adapter QTF. This default value (atblock 430) may be the minimum or the average execution time of adapters130 that have been used by the VM 120 (for which adapter QTF values arenon-zero), for example.

At block 440, obtaining a time indicator associated with each adapter130 includes using the adapter QTF associated with each adapter 130.Specifically, the time indicator for each adapter 130 may be computedas:

$\begin{matrix}{{time\_ indicator} = {{adapter\_ QTF}*{\sum\limits_{i = 0}^{n - 1}\left( {{queue\_ depth} + 1 + i} \right)}}} & \left\lbrack {{EQ}.\mspace{14mu} 3} \right\rbrack\end{matrix}$In EQ. 3, n is the number of requests submitted at a time and isdiscussed further below. As in EQ. 1, an adjusted queue depth value(queue_depth+1) is used in EQ. 3. When n=1 (one request is to besubmitted to an adapter 130), then EQ. 3 simplifies to:time_indicator=adapter_QTF*queue_depth+1  [EQ. 4]In EQ. 3 and EQ. 4, queue_depth again refers to the local queue depth orthe number of pending submissions from the VM 120 to the adapter 130(for which the time indicator is being computed). This is because, asnoted above, the VM 120 does not have knowledge of requests submitted byother VMs 120 to the same adapter 130 (i.e., the VM 120 does not know ifthe local and total queue depth are different). As a result, thetime_indicator in EQs. 3 and 4 is not necessarily the actual queue timefor the next request submitted by the VM 120. However, as opposed tousing a simple average queue time, which does not account for even thelocal queue depth, using QTF to obtain the time indicator provides amore accurate relative basis for the comparison (at block 450) ofavailable adapters 130.

The selection of an adapter 130 for submission of one request isdiscussed first (n=1 in EQ. 3 and EQ. 4 is applicable). Table 1 belowshows exemplary comparison values associated with three exemplaryadapters 130:

TABLE 1 Exemplary adapter comparison according to an embodiment. queuedepth (adjusted adapter_QTF queue depth) time indicator Adapter 1 2 3(4)  8 Adapter 2 5 1 (2) 10 Adapter 3 minimum  9 (10) X * 10 or averageexecution time (X) Adapter 4 15  0 (1) 15A comparison of the time indicator values (obtained at block 440) foradapter 1 130 and adapter 2 130 shows the utility of the adapter QTF.That is, if queue depth were the only factor considered, adapter 2 130would seem a more attractive choice for the next submission from the VM120. However, as the time indicator shows, adapter 1 130 is actually abetter choice than adapter 2 130. Adapter 3 130 has an adapter QTF of 0.Adapter 3 130 may not have completed any submissions from the VM 120yet, for example. If that adapter QTF (of 0) were used, then adapter 3130 would look like the best candidate with the lowest time indicator.However, as Table 1 indicates, adapter 3 130 actually has the highestqueue depth. To avoid this issue, in the case of adapter QTF=0, theminimum or average adapter execution time may be used as a substitutefor the adapter QTF value. This is similar to the discussion above withreference to block 330 (FIG. 3) when the QTF value is 0. The minimum oraverage execution time is indicated as X in Table 1. Adapter 4 130 has alocal queue depth of 0. That is, the VM 120 has no submissions pendingat adapter 4 130. If EQ. 4 (the special case of EQ. 3 with n=1) wereused with the queue time instead of the adjusted queue time to determinethe time indicator, then the time indicator for adapter 4 130 would be 0because the local queue depth is 0. However, because the adjusted queuedepth (queue depth+1) is used instead, the time indicator for exemplaryadapter 4 130 is 15 rather than 0. In this case, while using the queuedepth (0) would have made adapter 4 130 look like the most desirableadapter 130, using adjusted queue depth (1) makes clear that adapters 1and 2 130 (and, possibly, adapter 3 130 based on the value of X) arebetter choices. Comparing and selecting an adapter 130 at block 450includes selecting the adapter 130 associated with the lowest timeindicator (among the time indicator values computed for each availableadapter 130). In the exemplary case shown in Table 1, adapter 1 130would be selected for submission of the next request. After eachsubmission has been processed by the selected adapter 130, the adapterQTF value (for the selected adapter 130) and, thus, the time indicatorvalue for that adapter 130 may be updated and used in the comparisonprior to the next selection of adapter 130.

According to another embodiment, batch submission may be performed by aVM 120. In this case, a single adapter 130 is selected and the batchsubmission (a set of requests) is provided to adapter 130 at once. Thistype of batch request may be necessary when there is a dependency amongthe requests, for example, that require all requests to be submitted tothe same adapter 130. Unlike the embodiment discussed above, a batchsubmission does not lend itself to updating adapter QTF and timeindicator values between submissions. Instead, the adjusted queue depthsfor each submission are added according to EQ. 3, as shown in Table 2below. That is, for example, if the local queue depth is 1 and a batchsubmission of 3 requests is being considered, an adjusted queue depth of9 (2+3+4) would be used rather than just an adjusted queue depth of 2(1+1). This is because the adjusted queue depth would only be 2 for thefirst of the 3 requests in the batch submission. The adjusted queuedepth for the second of the 3 requests would be 3 and the adjusted queuedepth for the third of the 3 requests would be 4. Table 2 showsexemplary comparison values for a pending batch submission of differentnumbers of requests to one of two adapters 130.

TABLE 2 Exemplary adapter comparison according to another embodiment.adapter 1 adapter 2 (adapter QTF = 2; (adapter QTF = 6; # of adjustedqueue adjusted queue depth = 1) submissions depth = 7) time timeindicator for in batch indicator for comparison comparison 1 2 * (7) =14 6 * (1) = 6 2 2 * (7 + 8) = 30 6 * (1 + 2) = 18 3 2 * (7 + 8 + 9) =48 6 * (1 + 2 + 3) = 26 4 2 * (7 + 8 + 9 + 10) = 68 6 * (1 + 2 + 3 + 4)= 60 5 2 * (7 + 8 + 9 + 10 + 6 * (1 + 2 + 3 + 4 + 5) = 90 11) = 90 6 2 *(7 + 8 + 9 + 10 + 6 * (1 + 2 + 3 + 4 + 5 + 6) = 11 + 12) = 114 126

Table 2 shows the queue depth value according to EQ. 3 for each adapter130 in the example and shows the time indicator that may be used tocompare the adapters 130 for different exemplary batch submission sizes.Batch submissions of 1 to 6 requests are shown in Table 2. As Table 2indicates, adapter 1 130 is preferable for a batch submission of 6requests, but for batch submissions of 1, 2, 3, or 4 requests, adapter 2130 is preferable. For a batch submission of 5 requests, either adapter1 130 or adapter 2 130 would provide similar performance (similar queuetime for the batch request). In the case of a batch submission, the QTFmay still be updated. According to one embodiment, the QTF may beupdated as each request in the batch is completed. In this case, the nrequests in the batch submission are treated as n separate requests forpurposes of updating the QTF on the back end, after each submission isprocessed, even though the requests are treated together at the frontend for purposes of selecting an adapter 130, according to EQ. 3. In analternate embodiment, an average of actual queue times of the batch maybe used and may additionally be a weighted average.

According to yet another embodiment, an adapter 130 may process multiplerequests concurrently. In this case, the time indicator (estimated queuetime) that has been determined for a batch submission must be divided bythe number of requests that the adapter 130 can process concurrently.That is, for example, if adapter 1 130 in Table 2 were able to process 2requests concurrently, then for a batch submission of 6 requests, thetime indicator (queue time) of 114 shown in Table 2 would be divided by2 for comparison purposes.

The terminology used herein is for the purpose of describing particularembodiments only and is not intended to be limiting of the invention. Asused herein, the singular forms “a”, “an” and “the” are intended toinclude the plural forms as well, unless the context clearly indicatesotherwise. It will be further understood that the terms “comprises”and/or “comprising,” when used in this specification, specify thepresence of stated features, integers, steps, operations, elements,and/or components, but do not preclude the presence or addition of oneor more other features, integers, steps, operations, element components,and/or groups thereof.

The corresponding structures, materials, acts, and equivalents of allmeans or step plus function elements in the claims below are intended toinclude any structure, material, or act for performing the function incombination with other claimed elements as specifically claimed. Thedescription of the present invention has been presented for purposes ofillustration and description, but is not intended to be exhaustive orlimited to the invention in the form disclosed. Many modifications andvariations will be apparent to those of ordinary skill in the artwithout departing from the scope and spirit of the invention. Theembodiment was chosen and described in order to best explain theprinciples of the invention and the practical application, and to enableothers of ordinary skill in the art to understand the invention forvarious embodiments with various modifications as are suited to theparticular use contemplated

The flow diagrams depicted herein are just one example. There may bemany variations to this diagram or the steps (or operations) describedtherein without departing from the spirit of the invention. Forinstance, the steps may be performed in a differing order or steps maybe added, deleted or modified. All of these variations are considered apart of the claimed invention.

While the preferred embodiment to the invention had been described, itwill be understood that those skilled in the art, both now and in thefuture, may make various improvements and enhancements which fall withinthe scope of the claims which follow. These claims should be construedto maintain the proper protection for the invention first described.

The descriptions of the various embodiments of the present inventionhave been presented for purposes of illustration, but are not intendedto be exhaustive or limited to the embodiments disclosed. Manymodifications and variations will be apparent to those of ordinary skillin the art without departing from the scope and spirit of the describedembodiments. The terminology used herein was chosen to best explain theprinciples of the embodiments, the practical application or technicalimprovement over technologies found in the marketplace, or to enableothers of ordinary skill in the art to understand the embodimentsdisclosed herein.

The present invention may be a system, a method, and/or a computerprogram product at any possible technical detail level of integration.The computer program product may include a computer readable storagemedium (or media) having computer readable program instructions thereonfor causing a processor to carry out aspects of the present invention.

The computer readable storage medium can be a tangible device that canretain and store instructions for use by an instruction executiondevice. The computer readable storage medium may be, for example, but isnot limited to, an electronic storage device, a magnetic storage device,an optical storage device, an electromagnetic storage device, asemiconductor storage device, or any suitable combination of theforegoing. A non-exhaustive list of more specific examples of thecomputer readable storage medium includes the following: a portablecomputer diskette, a hard disk, a random access memory (RAM), aread-only memory (ROM), an erasable programmable read-only memory (EPROMor Flash memory), a static random access memory (SRAM), a portablecompact disc read-only memory (CD-ROM), a digital versatile disk (DVD),a memory stick, a floppy disk, a mechanically encoded device such aspunch-cards or raised structures in a groove having instructionsrecorded thereon, and any suitable combination of the foregoing. Acomputer readable storage medium, as used herein, is not to be construedas being transitory signals per se, such as radio waves or other freelypropagating electromagnetic waves, electromagnetic waves propagatingthrough a waveguide or other transmission media (e.g., light pulsespassing through a fiber-optic cable), or electrical signals transmittedthrough a wire.

Computer readable program instructions described herein can bedownloaded to respective computing/processing devices from a computerreadable storage medium or to an external computer or external storagedevice via a network, for example, the Internet, a local area network, awide area network and/or a wireless network. The network may comprisecopper transmission cables, optical transmission fibers, wirelesstransmission, routers, firewalls, switches, gateway computers and/oredge servers. A network adapter card or network interface in eachcomputing/processing device receives computer readable programinstructions from the network and forwards the computer readable programinstructions for storage in a computer readable storage medium withinthe respective computing/processing device.

Computer readable program instructions for carrying out operations ofthe present invention may be assembler instructions,instruction-set-architecture (ISA) instructions, machine instructions,machine dependent instructions, microcode, firmware instructions,state-setting data, configuration data for integrated circuitry, oreither source code or object code written in any combination of one ormore programming languages, including an object oriented programminglanguage such as Smalltalk, C++, or the like, and procedural programminglanguages, such as the “C” programming language or similar programminglanguages. The computer readable program instructions may executeentirely on the user's computer, partly on the user's computer, as astand-alone software package, partly on the user's computer and partlyon a remote computer or entirely on the remote computer or server. Inthe latter scenario, the remote computer may be connected to the user'scomputer through any type of network, including a local area network(LAN) or a wide area network (WAN), or the connection may be made to anexternal computer (for example, through the Internet using an InternetService Provider). In some embodiments, electronic circuitry including,for example, programmable logic circuitry, field-programmable gatearrays (FPGA), or programmable logic arrays (PLA) may execute thecomputer readable program instructions by utilizing state information ofthe computer readable program instructions to personalize the electroniccircuitry, in order to perform aspects of the present invention.

Aspects of the present invention are described herein with reference toflowchart illustrations and/or block diagrams of methods, apparatus(systems), and computer program products according to embodiments of theinvention. It will be understood that each block of the flowchartillustrations and/or block diagrams, and combinations of blocks in theflowchart illustrations and/or block diagrams, can be implemented bycomputer readable program instructions.

These computer readable program instructions may be provided to aprocessor of a general purpose computer, special purpose computer, orother programmable data processing apparatus to produce a machine, suchthat the instructions, which execute via the processor of the computeror other programmable data processing apparatus, create means forimplementing the functions/acts specified in the flowchart and/or blockdiagram block or blocks. These computer readable program instructionsmay also be stored in a computer readable storage medium that can directa computer, a programmable data processing apparatus, and/or otherdevices to function in a particular manner, such that the computerreadable storage medium having instructions stored therein comprises anarticle of manufacture including instructions which implement aspects ofthe function/act specified in the flowchart and/or block diagram blockor blocks.

The computer readable program instructions may also be loaded onto acomputer, other programmable data processing apparatus, or other deviceto cause a series of operational steps to be performed on the computer,other programmable apparatus or other device to produce a computerimplemented process, such that the instructions which execute on thecomputer, other programmable apparatus, or other device implement thefunctions/acts specified in the flowchart and/or block diagram block orblocks.

The flowchart and block diagrams in the Figures illustrate thearchitecture, functionality, and operation of possible implementationsof systems, methods, and computer program products according to variousembodiments of the present invention. In this regard, each block in theflowchart or block diagrams may represent a module, segment, or portionof instructions, which comprises one or more executable instructions forimplementing the specified logical function(s). In some alternativeimplementations, the functions noted in the blocks may occur out of theorder noted in the Figures. For example, two blocks shown in successionmay, in fact, be executed substantially concurrently, or the blocks maysometimes be executed in the reverse order, depending upon thefunctionality involved. It will also be noted that each block of theblock diagrams and/or flowchart illustration, and combinations of blocksin the block diagrams and/or flowchart illustration, can be implementedby special purpose hardware-based systems that perform the specifiedfunctions or acts or carry out combinations of special purpose hardwareand computer instructions.

What is claimed is:
 1. A machine implemented by a processor, the machinecomprising: an interface configured to send a submission to a selectedadapter among two or more adapters that perform a same function; and theprocessor configured to: calculate a time indicator associated with eachof the two or more adapters based on a respective adapter queue timefactor (QTF) associated with each of the two or more adapters, theadapter QTF associated with each of the two or more adapters being acomputed value; and select the selected adapter among the two or moreadapters based on a comparison of the time indicator associated witheach of the two or more adapters, wherein the processor calculates thetime indicator as:${{time\_ indicator} = {{adapter\_ QTF}*{\sum\limits_{i = 0}^{n - 1}\left( {{queue\_ depth} + 1 + i} \right)}}},$where time_indicator is the time indicator, adapter_QTF is therespective adapter QTF of the respective adapter, n is a number of theone or more requests, and queue_depth refers to a number of pendingrequests from the machine at the respective adapter among the two ormore adapters at a time of submission of the one or more requests. 2.The machine according to claim 1, wherein the processor determines theadapter QTF associated with each of the two or more adapters bycomputing an average of one or more QTF values.
 3. The machine accordingto claim 2, wherein the average includes a weighted average based onweighting a most recent QTF value among the one or more QTF values lessthan other QTF values among the one or more QTF values.
 4. The machineaccording to claim 1, wherein the processor determines the adapter QTFfor each of the two or more adapters by setting the respective adapterQTF to a minimum or average execution time of one or more of the two ormore adapters based on the machine not submitting a previous request tothe respective adapter.
 5. The machine according to claim 1, wherein,based on one or more of the two or more adapters being configured toperform concurrent processing, the processor divides the respective timeindicator of each of the one or more of the two or more adapters by arespective number of requests that the respective one or more of the twoor more adapters is configured to concurrently process.
 6. A computerprogram product for a machine selecting a selected adapter among two ormore adapters that perform a same function, the computer program productcomprising a computer readable storage medium having programinstructions embodied therewith, the program instructions executable bya processor to perform a method comprising: generating a request, at themachine, for the function; calculating a time indicator associated witheach of the two or more adapters based on a respective adapter queuetime factor (QTF) associated with each of the two or more adapters, theadapter QTF associated with each of the two or more adapters being acomputed value; and selecting the selected adapter and submitting one ormore requests to the selected adapter of the two or more adapters toperform the function based on a comparison of the time indicatorassociated with each of the two or more adapters, wherein thecalculating the time indicator is given by:${{time\_ indicator} = {{adapter\_ QTF}*{\sum\limits_{i = 0}^{n - 1}\left( {{queue\_ depth} + 1 + i} \right)}}},$where time_indicator is the time indicator, adapter_QTF is therespective adapter QTF of the respective adapter, n is a number of theone or more requests, and queue_depth refers to a number of pendingrequests from the machine at the respective adapter among the two ormore adapters at a time of submission of the one or more requests, and,based on one or more of the two or more adapters being configured toperform concurrent processing, the respective time indicator of each ofthe one or more of the two or more adapters is divided by a respectivenumber of requests that the respective one or more of the two or moreadapters is configured to concurrently process.
 7. The computer programproduct according to claim 6, further comprising determining the adapterQTF associated with each of the two or more adapters based on one ormore QTF values, each QTF value being determined based on a submissionof a previous request by the machine to the respective adapter.
 8. Thecomputer program product according to claim 6, wherein the determiningthe adapter QTF for each of the two or more adapters includes settingthe respective adapter QTF to a minimum or average execution time of oneor more of the two or more adapters based on the machine not submittinga previous request to the respective adapter.